package com.ruoyi.mobile.mapper;

import java.security.PublicKey;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

import com.ruoyi.mobile.domain.CheckinRecord;
import com.ruoyi.mobile.model.vo.CheckinCountVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

/**
 * 打卡记录Mapper接口
 * 
 * @author ruoyi
 * @date 2022-10-05
 */
public interface CheckinRecordMapper 
{
    /**
     * 查询打卡记录
     * 
     * @param id 打卡记录主键
     * @return 打卡记录
     */
    public CheckinRecord selectCheckinRecordById(Integer id);

    /**
     * 查询打卡记录列表
     * 
     * @param checkinRecord 打卡记录
     * @return 打卡记录集合
     */
    public List<CheckinRecord> selectCheckinRecordList(CheckinRecord checkinRecord);


    /**
     * 检查某个用户某天是否有打卡
     * @param day
     * @return
     */
    public Integer getCheckinRecordCountByDate(@Param("day") LocalDate day, @Param("userId") Integer userId);


    /**
     * 获取某一天的打卡用户数
     * @param day
     * @return
     */
    public Integer getTodayCheckinCount(@Param("day") LocalDate day);

    /**
     * 获取某一段时间内每天的打卡用户数量
     * @param startDay
     * @param endDay
     * @return
     */
    @MapKey("date")
    public Map<LocalDateTime, CheckinCountVo> selectCheckinCountByDate(@Param("startDay") LocalDateTime startDay, @Param("endDay") LocalDateTime endDay);


    /**
     * 获取一段时间内用户打卡次数
     * @param userId
     * @param startDay
     * @param endDay
     * @return
     */
    public Integer getUserCheckinCountByDate(@Param("userId") Integer userId, @Param("startDay") LocalDateTime startDay, @Param("endDay") LocalDateTime endDay);


}
